#ifndef __GAME_CONTROLLER_ILEVEL_HPP__
#define __GAME_CONTROLLER_ILEVEL_HPP__

#include "game_model\ih\game_model_iobject.hpp"
#include "game_model\ih\game_model_idistance_unit.hpp"

#include "game_controller\ih\game_controller_iscene.hpp"

#include <set>

namespace GameController {

struct ILevel
{
	typedef std::set< GameModel::IObject::Ptr > ObjectsContainer;
	typedef ObjectsContainer::iterator ObjectsIterator;
	typedef ObjectsContainer::const_iterator ObjectsConstIterator;

public:

	virtual void addObject( GameModel::IObject::Ptr _object ) = 0;

	virtual void setBackground( QImage* _back ) = 0;

	virtual std::shared_ptr< IScene > formScene( std::shared_ptr< GameModel::IDistanceUnit > _from, std::shared_ptr< GameModel::IDistanceUnit > _to ) = 0;

public:

	virtual ObjectsContainer& getObjects() = 0;

	virtual ObjectsContainer const& getObjects() const = 0;

};

} // namespace GameController

#endif // __GAME_CONTROLLER_ILEVEL_HPP__
